/** @jsxImportSource @emotion/react */
import * as React from "react";
import {
    CCell, Cell, TableRow, useTheme,
} from "customize-easy-ui-component";
import {DirectLink} from "../../../routing/Link";
import {useMedia} from "use-media";
import {EvaluateItemConfig, itemCheckResTransform, itemFenXianClassTransform, RecordEvalArea} from "../config";

/**正式报告的显示： 这种配置模式，显示逻辑变简单了，但是对配置的修改要求变麻烦了。
 * 检测结果 严重程度 风险频率 风险类别
 * */
export const useLikeSafeEvalOfficial= ({itRes, ItemArs, model,ver, repId}
                                           :{itRes:any, ItemArs:RecordEvalArea[], model:string,ver:string, repId:string}
) => {
    const theme = useTheme();
    const atPrint = useMedia('print');
    const renderIspContent =React.useMemo(() => {
        let seq = 0;
        let htmlTxts =[] as React.ReactNode[];
        let ox: number;       //目前这行的项目编码分解第一级别 .x==是多少的
        let oy: number;
        let oz: number;
        let iclas: string;
        let big: string;         //目前这行的项目编码分解第一级别 的文字标题是=..
        let titl: string;
        let sub: string;
        //类似于Context作用的：看能否压缩显示，避免页面太罗嗦显示重复内容。计数器：规则 大标题1省7，标题1省5，小标题1省3个。
        let ctx: number=0;
        let cty: number=0;       //目前这行的项目编码分解第二级别 .y 的完全相同的累计计数器=；
        let ctz: number=0;
        ItemArs?.forEach((area, b) => {
            area && area.items.forEach((et:EvaluateItemConfig, n:number) => {
                if(et){
                    seq += 1;
                    let nowColumns;      //可变的项目栏 栏目有几列，
                    if(et.seco) nowColumns=2;
                    else nowColumns=1;
                    let scoreN;
                    if(et.weight!==undefined){
                        if(typeof et.weight === 'number')
                            scoreN=itRes?.[et.name+'_F'] || '/';
                        else
                            scoreN="合并 "+et.weight;
                    }
                    //监督检验项目: 印象是 前面最多有4列的？
                    //4个项目特殊：若遇见自扩展分拆项形式的项目： 第一个结论 【】数据扩充{结论字段：‘3.9Res’}3.11。3Res’ 3.12.4Res’ 5Res’;也别名字。
                    let itemRowRender=[];
                    const {chendu, pinglv, fxclass}=itemFenXianClassTransform(itRes,et.name);
                    itemRowRender[0] =<TableRow id={n===0 ? area.tag:undefined} key={n}>
                            <CCell key={1}>{et.x}</CCell>
                            { (et.bspan!)>0 && <CCell key={2} split={true} rowSpan={et.bspan} colSpan={1===nowColumns? 2:1}
                                   >{et.big}</CCell>
                            }
                            {nowColumns>=2 && (et.tspan!)>0 && <CCell split={true} key={3} rowSpan={et.tspan}
                                    >{et.seco}</CCell>
                            }
                            <CCell key={4}>{et.pre??''}{et.x}.{et.y}{et.iclas??''}</CCell>
                            <Cell key={5}>{et.titl}</Cell>
                            <CCell key={6}>{itemCheckResTransform(itRes,et.name)}</CCell>
                            <CCell key={7}>{chendu || '/'}</CCell>
                            <CCell key={8}>{pinglv || '/'}</CCell>
                            <CCell key={9}>{fxclass}</CCell>
                            {(et.weight!==undefined) && <>
                                    <CCell key={10} split={true} rowSpan={et.rspan??1}>{et.weight}</CCell>
                                    <CCell key={11} split={true} rowSpan={et.rspan??1}>{scoreN}</CCell>
                                </>
                            }
                        </TableRow>;
                    //【注意】 et.sub?? 假如 sub='' 逻辑成立，需改undefined;
                    const rowsBigArea=<React.Fragment key={seq}>
                        <DirectLink  href={`/report/${model}/ver/${ver}/${repId}/${area.tag}#${area.tag}`}>
                            {itemRowRender}
                        </DirectLink>
                    </React.Fragment>;
                    htmlTxts.push(rowsBigArea);    //原先在htmlTxts.push(itemRowRender);bigItemRowCnt++;前面就处理的
                }
            });
        });

        return  htmlTxts;
    }, [itRes,repId,model,ver,ItemArs,atPrint]);
    return { renderIspContent };
};
